package leetcode.ints;

/**
 * 报数序列是指一个整数序列，按照其中的整数的顺序进行报数，得到下一个数。其前五项如下：
 * <p>
 * 1.     1
 * 2.     11
 * 3.     21
 * 4.     1211
 * 5.     111221
 * 1 被读作  "one 1"  ("一个一") , 即 11。
 * 11 被读作 "two 1s" ("两个一"）, 即 21。
 * 21 被读作 "one 2",  "one 1" （"一个二" ,  "一个一") , 即 1211。
 * <p>
 * 给定一个正整数 n ，输出报数序列的第 n 项。
 * <p>
 * 注意：整数顺序将表示为一个字符串。
 * <p>
 * 示例 1:
 * <p>
 * 输入: 1
 * 输出: "1"
 * 示例 2:
 * <p>
 * 输入: 4
 * 输出: "1211"
 */
public class Solution5 {
    public String countAndSay(int n) {
        if (n == 1) {
            return "1";
        }
        String res = "1";
        for (int i = 2; i <= n; i++) {
            res = read(res);
        }
        return res;
    }

    private String read(String input) {
        String result = "";
        int count = 1;
        if (input.length() == 1) {
            return 1 + input;
        }
        for (int i = 0; i < input.toCharArray().length; i++) {
            if (i != 0) {
                int first = Integer.valueOf(String.valueOf(input.charAt(i - 1)));
                int last = Integer.valueOf(String.valueOf(input.charAt(i)));
                if (i != input.toCharArray().length - 1) {
                    if (first == last) {
                        count++;
                    } else {
                        result = result + count + first;
                        count = 1;
                    }
                } else {
                    if (first == last) {
                        count++;
                        result = result + count + first;
                    } else {
                        result = result + count + first;
                        result = result + 1 + last;
                        count = 1;
                    }
                }
            }
        }
        return result;
    }


    public static void main(String[] args) {
        System.out.println(Character.digit('1', 10));
        //System.out.println("1".charAt(0) + 0);
        //System.out.println(new Solution2().countAndSay(5));
    }
}
